การใช้ CData API Server ใน EC2
ครั้งนี้ผมจะมาเขียนบทความ การใช้ CData API Server ใน EC2
สิ่งที่ต้องมี
- Microsoft Windows Server บน EC2 ที่เชื่อมต่อกับ Aurora Serverless แล้ว
- Aurora Serverless ที่ Import ข้อมูลแล้ว
- ติดตั้งและตั้งค่า CData API Server ใน Microsoft Windows Server บน EC2 แล้ว
Server (CData API Server)
EC2 (Windows): Microsoft Windows Server บน EC2
Database Server
Database: RDS Aurora
Data: Example Databases
ขั้นตอนการเตรียม
ตัวอย่างตั้งค่าการสร้าง Microsoft Windows Server ใน EC2
※Create Key pairs
Key pairs:tinnakorn-cdata-api-server
(ตั้งชื่อที่ต้องการ)
Key pair type:RSA
Private key file format: ◉pem
※Launch instances
Name and tags
Name:tinnakorn-cdata-api-server
(ตั้งชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Microsoft Windows Server 2022 Base
Instance type
Instance type:t3a.medium
Key pair (login)
Key pair name - required:tinnakorn-cdata-api-server
(key pair ที่สร้างขึ้นเมื่อสักครู่นี้)Network settings
Firewall (security groups)
Security group name - required:tinnakorn-cdata-api-server
(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-cdata-api-server
(ป้อนตามต้องการ)
Inbound security groups rules
Security group rule 1 (TCP, 3389, xxx.xxx.xxx.xxx/32)
Type:rdp
| Source type:My IP
| Source:xxx.xxx.xxx.xxx/32
Configure storage
1x:30
GiBgp2
Root volume (Default)
ตัวอย่างตั้งค่าการสร้าง RDS Aurora ในบทความนี้
※Create Security Group สำหรับ RDS Aurora
Basic details
Security group name:tinnakorn-cdata-api-server-db
(ตั้งชื่อที่ต้องการ)
Description:tinnakorn-cdata-api-server-db
(ป้อนตามต้องการ)Inbound rules
Type:MYSQL/Aurora
| Source:Custom
|tinnakorn-cdata-api-server
(พิมพ์ค้นหาชื่อ EC2 ที่จะใช้แล้วเลือก) → sg-ab12cd34xxxx※Create RDS Aurora
Engine options
Engine type:Amazon Aurora
Edition:Amazon Aurora MySQL-Compatible Edition
Available versions:Aurora (MySQL 5.7) 2.07.1
Templates
⦿Production
Settings
DB instance identifier:tinnakorn-cdata-api-server-db
Credentials Settings
Master username:admin
Master password:PassW0rd
(รหัสผ่านนี้เป็นแค่ตัวอย่าง ให้ตั้งรหัสผ่านที่ต้องการ)
Confirm password:PassW0rd
Instance configuration
DB instance class
◉ Serverless
Serverless v1
Capacity range
Minimum ACUs:1 ACU
Maximum ACUs:1 ACU
Additional scaling configuration
Autoscaling timeout and action:00:05:00
Pause after inactivity:✅ Scale the capacity to 0 ACUs when cluster is idle
00:05:00
Connectivity
Existing VPC security groups:tinnakorn-cdata-api-server-db
(เลือก security group ที่เราสร้างสำหรับ RDS Aurora)
Additional configuration
Web Service Data API:✅ Data API
การเชื่อมต่อ Database และ Import Data ไปยัง RDS Aurora
ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การ Import ข้อมูลจาก MySQL Workbench บน Windows ไปยัง RDS Aurora
เมื่อเตรียมสภาพแวดล้อมการทำงานตามที่กล่าวมาในขั้นตอนนี้ทั้งหมดเสร็จเรียบร้อยแล้ว ต่อไปเราจะมาเริ่มใช้งาน CData API Server ใน Microsoft Windows Server บน EC2 กันครับ
ขั้นตอนต่อไปนี้ จะดำเนินการใน Remote Desktop Connection ทั้งหมด
การติดตั้ง CData API Server
คัดลอกลิงก์ด้านล่างนี้ไปเปิดที่ Microsoft Edge ใน Remote Desktop Connection แล้วเลือก Download API Server:Windows (.NET)
(เมื่อคลิกปุ่ม Download แล้วให้ใส่ Email เพื่อดาวน์โหลด)
https://www.cdata.com/apiserver/download/
เมื่อดาวน์โหลดแล้ว ให้เริ่มทำการติดตั้งโดยเปิดCDataAPIServer.exe
ขึ้นมา แล้วคลิกNext >
เลือกโฟลเดอร์ปลายทางการติดตั้ง ในตัวอย่างนี้จะไม่เปลี่ยนแปลงอะไร แล้วคลิกNext >
ไม่ต้องเปลี่ยนแปลงอะไร คลิกNext >
ได้เลย
เลือก Start Menu Folder ในตัวอย่างนี้จะไม่เปลี่ยนแปลงอะไร แล้วคลิกNext >
ต้องตั้ง Password เพื่อใช้สำหรับป้อนในหน้า Login ของ CData API Server เพื่อเข้าใช้งาน แล้วคลิกNext >
คลิกInstall
แล้วรอให้ระบบติดตั้งสักครู่
การเข้าสู่ระบบ CData API Server
เมื่อติดตั้งเสร็จเรียบร้อยแล้ว คลิกที่ปุ่มไอคอนWindows
แล้วคลิกโฟลเดอร์CData APIServer
และคลิกStart API Server
ได้เลย
รอสักครู่แล้วจะเข้ามาที่หน้า Login โดยอัตโนมัติ จากนั้นให้ใส่ Password ตามที่เราตั้งค่าไว้ตอนที่ติดตั้ง Windows (.NET) เมื่อสักครู่นี้ แล้วคลิก→] Sign in
เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้ ซึ่ง API Server จะเริ่มทำงานหลังจากที่เราติดตั้งเสร็จเรียบร้อยแล้ว
การตั้งค่า CData API Server
การลงทะเบียนการทดลองใช้งานฟรี 30 วัน
คลิกแท็บABOUT
แล้วเลือกตามประเภทการใช้งานของเรา
ตัวอย่างนี้จะเลือกActivate 30-Day Trial
แล้วป้อน Name และ Email เพื่อลงทะเบียนการทดลองใช้งานฟรี 30 วัน แล้วติ๊ก✅
I agree to the และคลิกActivate Trial
ทดสอบการเชื่อมต่อกับ MySQL
ต่อไปเลือกแท็บSETTINGS
แล้วเลือกConnections
และคลิก+ Add Connection...
แล้วเลือก Database ที่ต้องการทำเป็น REST API ครั้งนี้จะเลือกMySQL
ตัวอย่างการตั้งค่า Server ของตัวอย่างนี้
» Server: ป้อน Endpoint ของ RDS Aurora
» Database: ป้อนชื่อworld
ที่ได้ทำการ Import ใน MySQL WorkBench
» User:admin
(Username ของ RDS Aurora)
» Password:PassW0rd
(Password ของ RDS Aurora)
» เมื่อป้อนข้อมูลเสร็จแล้ว ให้ทดสอบการเชื่อมต่อโดยคลิกTest Connection
» ถ้าทดสอบสำเร็จแล้ว ให้คลิกSave Changes
ตอนนี้การตั้งค่าการเชื่อมต่อเสร็จสมบูรณ์แล้ว
การเพิ่ม Resources
ต่อไปเลือกแท็บResources
และคลิกAdd Resource...
รายการของ MySQL ที่สามารถเชื่อมต่อ Data ได้ จะแสดงออกมาที่หน้าจอ
จากนั้นเลือก MySQL ที่ตั้งค่าเมื่อสักครู่นี้ แล้วคลิก→ Next
รายการ Table จะแสดงออกมาที่หน้าจอ
จากนั้นให้เลือก Table ที่ต้องการเปลี่ยนเป็น REST API และคลิก→ Next
เปลี่ยนชื่อ Resource Name แนะนำให้เปลี่ยนเป็นชื่อที่เข้าใจง่าย (ตัวอย่างนี้คือworld_city
)
จากนั้นดูที่รายการของ Column Name ที่แสดงอยู่ด้านล่าง เราสามารถเลือก Column Name ตามต้องการได้
นอกจากนี้ Operations สามารถเลือกติ๊กตามช่องที่ต้องการได้ ดังนั้นให้เปลี่ยนตามความเหมาะสม
เมื่อเสร็จเรียบร้อยแล้ว คลิกSave
เมื่อการเพิ่ม Resource เสร็จเรียบร้อยแล้ว Resource ที่ลงทะเบียนเมื่อสักครู่นี้จะแสดงในรายการบนหน้าจอแบบนี้
การตรวจสอบ Resources ใน API
เมื่อตั้งค่าสำหรับการทำเป็น REST API เสร็จแล้ว ต่อไปจะทำการตรวจสอบ Resources ใน API
โดยเลือกแท็บAPI
แล้วดูที่ Resources จะเห็น /api.rsc/your_resource แสดงขึ้นมา (ตัวอย่างนี้คือ /api.rsc/world_city)
แล้วเลือก/api.rsc/your_resource
จากเมนูด้านซ้าย HTTP Methods ก็จะแสดงขึ้นมา
จากนั้นคลิกGET http://localhost:8153/api.rsc/your_resource/ +
เมื่อขยายส่วนของ GET แล้ว โค้ดตัวอย่างใน Javascript ก็จะแสดงขึ้นมา
นอกจาก Javascript แล้ว ยังมี cURL ด้วยเช่นกัน
การเพิ่ม Users
ต่อไปคือการเพิ่ม User ที่สามารถเรียกใช้ REST API ได้
เลือกแท็บSETTINGS
ด้านบนสุด แล้วเลือกแท็บUsers
และคลิก+ Add
เราสามารถตั้งค่า เช่น การอนุญาต Method ต่างๆกับ User และวันหมดอายุของ Token ได้
ทีนี้ให้เราตั้งชื่อUser or Group
และToken Lifetime (days)
(ถ้าตั้งค่าเป็น 0 ก็จะเป็นไม่มีวันหมดอายุ)
จากนั้นคลิกSave Changes
เมื่อเสร็จแล้วจะเห็น Authtoken แสดงในรายการแบบนี้ ดังนั้นให้เชื่อมต่อโดยใช้ Authtoken ของอันนี้ในตอนที่เรียกใช้ REST API
การเปิดใช้งาน CORS
เปิดการใช้งานการตั้งค่า CORS ใน CData API Server โดยเข้ามาที่ "SETTINGS > Server"
แล้วติ๊ก✅
Enable cross-origin resource sharing (CORS)
แล้วใส่*
ที่ Access-Control-Allow-Origin และคลิกSave Changes
เพียงเท่านี้การตั้งค่า Server ของการเปลี่ยนเป็น REST API และการออก Authtoken ก็เสร็จสมบูรณ์แล้ว
ในขั้นตอนถัดไปเราจะมาตรวจสอบว่าจะได้รับการตอบกลับโดยเรียกใช้ REST API ได้จริงหรือไม่
การเตรียม HTML สำหรับการเรียกใช้จริง
ข้อควรระวัง: ให้เปลี่ยน url: ใน ajax (ตรวจสอบ url ได้ที่ "API > Resources") และเปลี่ยน 'x-cdata-authtoken' โดยระบุ Authtoken ที่ได้รับตามจริง (ตรวจสอบ Authtoken ได้ที่ "SETTINGS > Users") (ตอนเปลี่ยนข้อมูลให้ลบ [ ] ออกด้วย)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Example</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script> $.ajax({ type: 'GET', url: 'http://localhost:8153/api.rsc/[your_resource]/', headers: { 'x-cdata-authtoken':'[your_authtoken]', 'Content-Type':'application/json;charset=utf-8' } }).done(function(data) { $("#myRESTData").html(JSON.stringify(data,null,"\t")); }); </script> </head> <body> <pre id="myRESTData"> </pre> </body> </html>
ทดสอบการดำเนินการ
ผลการดำเนินการของ HTML เมื่อสักครู่นี้ จะแสดงตามด้านล่างนี้
url: 'http://localhost:8153/api.rsc/world_city/'
Request ด้านบนนี้ เราจะได้รับข้อมูลทุกรณีหรือได้รับข้อมูลทั้งหมดนั่นเอง
ในส่วนของ CData API Server มี Parameters ที่สามารถใช้ได้หลายตัว
$select | Properties ที่จะส่งออกนั้นจะคั่นด้วยเครื่องหมายจุลภาค โดยค่าเริ่มต้น Properties จะถูกส่งออกทั้งหมด |
$filter | filter ที่ใช้กับผลลัพธ์ของ entity นี้ ตัวอย่างเช่น หากต้องการดึงข้อมูลรายการทั้งหมดที่แก้ไขหลังจาก ModifiedDate เฉพาะ เราจะต้องตั้งค่า $filter เป็นค่า [ModifiedDate gt 'yyyy-MM-dd'] |
$orderby | Properties ที่จะใช้เมื่อต้องการเรียงผลลัพธ์ |
$top | จำนวนสูงสุดของรายการที่จะส่งคืน |
$skip | จำนวนรายการที่จะข้ามเมื่อเลือกผลลัพธ์ |
กรณีที่ต้องการกรองข้อมูล
Parameters:$filter
ทีนี้เรามาลองส่งคืนเฉพาะข้อมูลในคอลัมน์ "CountryCode" ของประเทศ "THA" โดยใช้ $filter
กันครับ
[CountryCode = column_name
, THA = value
] (อย่าลืมเปลี่ยน url: และ 'x-cdata-authtoken' ให้เป็นข้อมูลของคุณ!)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Example</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script> $.ajax({ type: 'GET', url: 'http://localhost:8153/api.rsc/[your_resource]/?$filter=CountryCode eq "THA"', headers: { 'x-cdata-authtoken':'[your_authtoken]', 'Content-Type':'application/json;charset=utf-8' } }).done(function(data) { $("#myRESTData").html(JSON.stringify(data,null,"\t")); }); </script> </head> <body> <pre id="myRESTData"> </pre> </body> </html>
จะเห็นว่าผลการตอบรับนั้นส่งคืนกลับมาโดยกรองข้อมูล CountryCode: THA ตามด้านล่างนี้
กรณีที่ต้องการรับแค่ TOP2
Parameters:$top
url: 'http://localhost:8153/api.rsc/[your_resource]/?$top=2'
กรณีที่ต้องการรับแค่ column ที่ระบุ เช่น (CountryCode,Population)
Parameters:$select
url: 'http://localhost:8153/api.rsc/[your_resource]/?$select=CountryCode,Population',
กรณีที่จะระบุ Parameter รวมกัน
Parameters:$select
, $top
เราสามารถระบุได้โดยคั่นด้วย&
เช่น$select=[column1,column2]&$top=[number]
url: 'http://localhost:8153/api.rsc/[your_resource]/?$select=CountryCode,Population&$top=2',
ผลลัพธ์เหล่านี้ก็จะส่งคืนกลับมาตาม Parameters ที่เราเรียกใช้ครับ
ความรู้เพิ่มเติม: การเผยแพร่ API ไปยังภายนอก
REST API ที่สร้างด้วย CData API Server ในการตั้งค่านี้ สามารถใช้ได้แค่ใน Windows Server
กรณีที่ต้องการเผยแพร่สิ่งนี้ ให้ทำการเผยแพร่ด้วย Port:8153
ไปยังภายนอกโดยใช้ Security Group
การตั้งค่านี้จะใช้ Anywhere-IPv4:0.0.0.0/0
เพื่อให้ได้รับการเข้าถึงจาก IP Address ทั้งหมด
กรณีที่จะทำให้สามารถเข้าถึงแค่จาก IP Address ที่เจาะจงนั้น ให้เปลี่ยนการตั้งค่าเป็นการระบุ IP Address
นอกจากนี้ Windows Server จะ Stop ด้วยการตั้งค่านี้ และเมื่อ Start ขึ้นมาใหม่ IP Address จะเปลี่ยนไป
อย่างไรก็ตาม เราสามารถล็อก IP Address ได้ด้วยการตั้งค่า Elastic IP โดยดูตัวอย่างได้ที่บทความด้านล่างนี้
ทีนี้เราก็สามารถเผยแพร่ REST API ที่สร้างโดย CData API Server ได้แล้ว
สรุป
จากที่ผมได้ลองใช้งาน CData API Server แล้ว ผมคิดว่าใช้งานง่ายมากๆ เพราะมีฟังก์ชันมากมายให้เราเลือกใช้งานและสามารถปรับแต่งให้เข้ากับ Environment ของเราได้ ซึ่งในตัวอย่างนี้เป็นการใช้งาน CData API Server ใน EC2 แล้วสร้าง REST API เพื่อให้สามารถรับ-ส่งข้อมูลจาก JavaScript ได้
อย่างไรก็ตาม ถึงแม้การตั้งค่าจะสามารถทำได้ง่ายๆ แต่เราต้องคำนึงถึงความปลอดภัยในการตั้งค่าต่างๆเป็นหลักด้วยครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP จากบริษัท Classmethod (Thailand) ครับ !